package com.qinggeng.project.system.service.impl;

import com.google.common.collect.Lists;
import com.qinggeng.common.enums.CommonEnum;
import com.qinggeng.common.utils.DateUtils;
import com.qinggeng.project.api.dto.OrdersGiftDto;
import com.qinggeng.project.api.security.utils.ApiUtils;
import com.qinggeng.project.system.domain.GoodsGift;
import com.qinggeng.project.system.domain.OrdersGift;
import com.qinggeng.project.system.mapper.GoodsGiftMapper;
import com.qinggeng.project.system.mapper.OrdersGiftMapper;
import com.qinggeng.project.system.service.IGoodsGiftService;
import com.qinggeng.project.system.service.IOrdersGiftService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 订单礼品Service业务层处理
 *
 * @author qinggeng
 * @date 2020-07-27
 */
@Slf4j
@Service
public class OrdersGiftServiceImpl implements IOrdersGiftService
{
    @Resource
    private OrdersGiftMapper ordersGiftMapper;
    @Resource
    private GoodsGiftMapper goodsGiftMapper;
    @Autowired
    private IGoodsGiftService goodsGiftService;

    /**
     * 查询订单礼品
     *
     * @param ordersGiftId 订单礼品ID
     * @return 订单礼品
     */
    @Override
    public OrdersGift selectOrdersGiftById(Long ordersGiftId)
    {
        return ordersGiftMapper.selectOrdersGiftById(ordersGiftId);
    }

    @Override
    public OrdersGift selectOrdersGiftByIdAndUserId(Long ordersGiftId,Long userId) {
        return ordersGiftMapper.selectOrdersGiftByIdAndUserId(ordersGiftId,userId);
    }

    @Override
    public OrdersGift selectOrdersGiftByOrdersIdAndGiftId(Long ordersId, Long giftId) {
        return ordersGiftMapper.selectOrdersGiftByOrdersIdAndGiftId(ordersId,giftId);
    }

    /**
     * 查询订单礼品列表
     *
     * @param ordersGift 订单礼品
     * @return 订单礼品
     */
    @Override
    public List<OrdersGift> selectOrdersGiftList(OrdersGift ordersGift)
    {
        return ordersGiftMapper.selectOrdersGiftList(ordersGift);
    }

    @Override
    public List<OrdersGiftDto> selectOrdersGiftDtoList(OrdersGift ordersGift) {
        return ordersGiftMapper.selectOrdersGiftDtoList(ordersGift);
    }

    /**
     * 新增订单礼品
     *
     * @param ordersGift 订单礼品
     * @return 结果
     */
    @Override
    public int insertOrdersGift(OrdersGift ordersGift)
    {
        ordersGift.setUpdateTime(DateUtils.getNowDate());
        return ordersGiftMapper.insertOrdersGift(ordersGift);
    }

    @Override
    public OrdersGift insertOrdersGift(Long ordersId, GoodsGift goodsGift,String pickFlag) {
        if(goodsGift==null) {
            return null;
        }
        OrdersGift ordersGift=selectOrdersGiftByOrdersIdAndGiftId(ordersId,goodsGift.getGiftId());
        try{
            if(null==ordersGift) {
                ordersGift=new OrdersGift(goodsGift,1L);
                ordersGift.setOrdersId(ordersId);
                ordersGift.setUserId(ApiUtils.getUserId());
                ordersGift.setPickFlag(pickFlag);
                int rows=insertOrdersGift(ordersGift);
                if(rows<1){
                    return null;
                }
                return ordersGift;
            }
            int rows=this.updateOrdersGiftNum(ordersGift.getOrdersGiftId(),pickFlag);
            if(rows<1){
                return null;
            }
            return ordersGift;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }

    }

    /**
     * 修改订单礼品
     *
     * @param ordersGift 订单礼品
     * @return 结果
     */
    @Override
    public int updateOrdersGift(OrdersGift ordersGift)
    {
        ordersGift.setUpdateTime(DateUtils.getNowDate());
        return ordersGiftMapper.updateOrdersGift(ordersGift);
    }

    /**
     * 批量删除订单礼品
     *
     * @param ordersGiftIds 需要删除的订单礼品ID
     * @return 结果
     */
    @Override
    public int deleteOrdersGiftByIds(Long[] ordersGiftIds)
    {
        return ordersGiftMapper.deleteOrdersGiftByIds(ordersGiftIds);
    }

    /**
     * 删除订单礼品信息
     *
     * @param ordersGiftId 订单礼品ID
     * @return 结果
     */
    @Override
    public int deleteOrdersGiftById(Long ordersGiftId)
    {
        return ordersGiftMapper.deleteOrdersGiftById(ordersGiftId);
    }

    @Override
    public List<OrdersGift> selectOrdersGiftListByOrdersId(Long ordersId) {
        List<OrdersGift> ordersGiftList=Lists.newArrayList();
        for (OrdersGift ordersGift:ordersGiftMapper.selectOrdersGiftListByOrdersId(ordersId)
             ) {
           if(ordersGift.getGiftId().compareTo(goodsGiftService.getFreeGiftId())!=0){
               ordersGiftList.add(ordersGift);
           }
        }
        return ordersGiftList;
    }

    @Override
    public List<OrdersGift> selectOrdersGiftListByOrdersIds(List<Long> orderIdList) {
        List<OrdersGift> ordersGiftList=Lists.newArrayList();
        for (OrdersGift ordersGift:ordersGiftMapper.selectOrdersGiftListByOrdersIds(orderIdList)) {
            if(ordersGift.getGiftId().compareTo(goodsGiftService.getFreeGiftId())!=0){
                ordersGiftList.add(ordersGift);
            }
        }
        return ordersGiftList;
    }

    @Override
    public int updateOrdersGiftNum(Long ordersGiftId, String pickFlag) {
        int rows=0;
        try{
            rows=ordersGiftMapper.updateOrdersGiftNum(ordersGiftId,pickFlag);
        }catch (Exception e){
            log.error(e.getMessage());
        }
        return rows;
    }

    public List<OrdersGift> addOrdersGiftList(Long... giftIds){
        List<OrdersGift> ordersGiftList = Lists.newArrayList();
        for (Long giftId:giftIds) {
            GoodsGift goodsGift = goodsGiftMapper.selectGoodsGiftById(giftId);
            if(null==goodsGift){
                continue;
            }
            ordersGiftList.add(new OrdersGift(goodsGift, 1L));
        }
        return ordersGiftList;
    }

}
